﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Model
{
    public class Winkelwagen
    {
        private List<Artikel> inhoud;
        private double volume;
        private double maxInhoud;
        private double totaalprijs;
        private List<POI> afgelegdeWeg;
        private bool vol;
        private POI plaats;
        private double afstand;
        private double fitheid;

        public Winkelwagen(POI plaats)
        {
            volume = 0;
            inhoud = new List<Artikel>();
            afgelegdeWeg = new List<POI>();
            totaalprijs = 0;
            Afstand = 0;
            vol = false;
            this.Plaats = plaats;
            this.maxInhoud = 120000;
        }

        public Winkelwagen(Winkelwagen wagen)
        {
            this.inhoud = new List<Artikel>();
            this.inhoud.AddRange(wagen.Inhoud);
            this.maxInhoud = 120000;
            this.totaalprijs = wagen.Totaalprijs;
            this.afgelegdeWeg = wagen.AfgelegdeWeg;
            this.vol = wagen.Vol;
            this.plaats = wagen.Plaats;
            this.afstand = wagen.Afstand;
            this.volume = 0;
            for (int i = 0; i < inhoud.Count; i++)
            {
                this.volume = this.volume + inhoud[i].Volume;
            }
        }

        /// <summary>
        /// Het volume van de winkelwagen
        /// </summary>
        public double Volume
        {
            get { return volume; }
        }

        public bool Vol
        {
            get { return vol; }
        }

        /// <summary>
        /// De inhoud van de winkelwagen
        /// </summary>
        public List<Artikel> Inhoud
        {
            get { return inhoud; }
        }

        /// <summary>
        /// De afgelegde weg
        /// </summary>
        public List<POI> AfgelegdeWeg
        {
            get { return afgelegdeWeg; }
            set { afgelegdeWeg = value; }
        }

        /// <summary>
        /// De afgelegde afstand
        /// </summary>
        public double Afstand
        {
            get { return afstand; }
            set { afstand = value; }
        }

        public double Totaalprijs
        {
            get
            {
                double temp = 0;
                for (int i = 0; i < inhoud.Count; i++)
                {
                    temp = temp + inhoud[i].Prijs;
                }
                totaalprijs = temp;
                return totaalprijs;
            }
        }

        public POI Plaats
        {
            get { return plaats; }
            set
            {
                //POI positie = new POI(plaats);
                afgelegdeWeg.Add(plaats);
                plaats = value;
            }
        }

        public double Fitheid
        {
            get { return fitheid; }
            set { fitheid = value; }
        }

        /// <summary>
        /// Voegt een artikel toe aan de winkelwagen
        /// </summary>
        /// <param name="artikel">Het toe te voegen artikel</param>
        public void LaadArtikelIn(Artikel artikel)
        {
            //als de maximale inhoud groter is dan het huidige volume plus het volume van het artikel
            if (maxInhoud > volume + artikel.Volume && !this.inhoud.Contains(artikel))
            {
                totaalprijs += artikel.Prijs;
                volume += artikel.Volume;
                inhoud.Add(artikel);
            }
            else
            {
                vol = true;
            }
        }

        /// <summary>
        /// Verwijdert een artikel uit de winkelwagen
        /// </summary>
        /// <param name="artikel">Het te verwijderen artikel</param>
        public void VerwijderArtikel(Artikel artikel)
        {
            inhoud.Remove(artikel);
            totaalprijs = Totaalprijs - artikel.Prijs;
            volume -= artikel.Volume;
        }


    }
}
